Adaptive motor control circuit and method

ABSTRACT

An electric motor (101) is driven with a sequence of drive pulses (V 151 , V 153 , V 155 ) applied to its coils (131-135). The drive pulse widths are computed over a series of time periods (T DRIVE ) by a pulse generator (119) to form envelopes approximating the phase voltages (VE 151 , VE 153 , VE 155 ) of the coils to produce sinusoidal coil currents (I 131 , I 133 , I 135 ). A sensing circuit (137, 123) monitors the phase of the coil current with respect to phase voltage to compute a representative control signal (CONTROL). The phase has one polarity when the motor is delivering power from a battery to a load and the opposite polarity when power is delivered from the load to the battery. When the direction of transferred power changes, the control signal changes and the pulse generator switches on-the-fly to another sequence of drive pulses.

BACKGROUND OF THE INVENTION

The present invention relates in general to motor drive circuits and, more particularly, to circuits for driving electric motors with variable pulse width drive signals.

Electric motors currently are being used in a wide variety of consumer and industrial applications. For example, automobile manufacturers are using electric motors to replace combustion engines in motor vehicles. Such motors often are induction type electric motors in which the field windings consist of three coils connected to a common central node. The other ends of the coils are driven by three phase voltages mutually separated in phase by 120°. The phase voltages produce sinusoidal currents in the field coils for driving the motor.

Since automobile electric motors operate from a battery, it is important that they operate efficiently in order to minimize battery consumption and recharging. Consequently, most motor drive circuits use voltage pulses to drive the coils rather than phase voltage waveforms. The drive pulses are generated in an ordered sequence with variable pulse widths to produce an envelope whose shape approximates that of the desired phase voltages.

A number of schemes are in use for generating such motor drive pulse sequences. For example, with standard pulse width modulation (PWM), pulses are computed for each coil independently and the coils are driven with sinusoidal phase voltages. However, PWM fixes the central node at a constant potential, which reduces the maximum power available to drive the motor. Another scheme, space vector modulation (SVM), treats the coil drive pulses as a unit, which increases maximum power by allowing the central node to vary in potential. Such prior art schemes often can be selected to optimize the performance of a motor under one set of conditions. However, the performance deteriorates when the conditions change.

For example, it is desirable to use electric motors in automobiles to extend operating time by recharging the battery when the vehicle is decelerating using kinetic energy stored in the vehicle's mass. Hence, during motoring, the electric motor delivers energy to propel the vehicle, whereas during regeneration, the motor functions as a generator to transfer energy back to the battery. Prior art schemes which minimize power consumption during motoring suffer from low efficiency during regeneration, and vice versa.

Hence, there is a need for a circuit and method of adapting a motor drive system to changing conditions to maintain a high overall efficiency.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a schematic diagram of an electric motor and associated drive circuitry;

FIG. 2 is a graph of waveforms of a coil during motoring;

FIG. 3 is a graph of waveforms of a coil during regeneration;

FIG. 4 is a vector state diagram of a motor drive vector computed from base vectors;

FIG. 5 is a timing diagram showing a portion of one sequence of drive pulses; and

FIG. 6 is a timing diagram showing a portion of another sequence of drive pulses.

DETAILED DESCRIPTION OF THE DRAWINGS

FIG. 1 is a schematic diagram of an electric motor 101 and its associated drive circuitry configured for use in a motor vehicle, including coil drivers 111, 113 and 115, an interface circuit 117, a pulse generator 119, a memory circuit 121, a phase detector 123 and a sensor 137. A battery (not shown) supplies a voltage V_(DRIVE) =300.0 volts for driving motor 101.

Electric motor 101 is shown as a three-phase motor having coils 131, 133 and 135 oriented at 0°, 120° and 240° angles within motor 101 and electrically coupled to a central node 157 as shown. Coils 131-135 are respectively driven at nodes 151, 153 and 155 with drive pulse signals V₁₅₁, V₁₅₃ and V₁₅₅ from the outputs of coil drivers 111-115. The pulses of V₁₅₁ -V₁₅₅ have variable widths whose average duty cycles form envelopes that approximate the desired phase voltages at nodes 151-155. For convenience, these envelopes at nodes 151-155 are designated as VE₁₅₁, VE₁₅₃ and VE₁₅₅, respectively.

In response to V₁₅₁ -V₁₅₅, currents I₁₃₁, I₁₃₃ and I₁₃₅ flow from the V_(DRIVE) conductor through coils 131-135 to generate an electromagnetic force that drives a rotor (not shown) of motor 101 to propel the vehicle. When the vehicle decelerates, the process reverses, and motor 101 operates as a generator. Kinetic energy stored in the vehicle's mass induces currents I₁₃₁ -I₁₃₅ in coils 131-135 which flows back through drivers 111-115 to the battery. The power factor of motor 101 is set by the phases of I₁₃₁ -I₁₃₅, which lag VE₁₅₁ -VE₁₅₅ in phase during motoring, i.e., when motor 101 delivers energy to the vehicle, and undergo an inversion in polarity so as to effectively lead in phase during regeneration, i.e., when motor 101 is receiving energy from the vehicle.

The sequences of drive pulses are computed by pulse generator 119, which comprises a microcontroller or similar circuit that operates by implementing software instructions stored in memory 121 as described below. Pulse generator 119 computes one sequence during motoring operation and switches to another sequence while regenerating. The sequence being computed at any time is determined by a CONTROL signal produced by phase detector 123 to indicate the coil current phase.

Sensor 137 is disposed in motor 101 and includes an inductive pickup coil electromagnetically coupled for sensing I₁₃₁ flowing through coil 131. As shown in the figure, the reference direction of I₁₃₁ is out of the motor. Some applications use additional sensors to sense I₁₃₃ and I₁₃₅ as well. In an alternative embodiment, the phases of coil currents are determined from the rotor frequency with other types of sensors, such as optical sensing devices or Hall effect devices which produce sense pulses as the rotor passes. In addition, other physical states besides coil current, such as temperature, can be monitored and used to control motor 101. For example, temperature can be sensed with a thermocouple to produce a control signal to cause pulse generator 119 to switch to an idling drive pulse sequence if an elevated temperature is present. The present invention has a high degree of flexibility in improving the efficiency and reliability of motor 101 by monitoring such physical states and switching to an optimum drive pulse sequence when conditions warrant.

Pulse generator 119 computes V₁₅₁ -V₁₅₅ pulse widths from data stored in memory 121 which is indicative of the phase of VE₁₅₁ as described below. This phase data is applied to an input of phase detector 123 along with the sense signal from sensor 137 to produce CONTROL having one value when I₁₃₁ effectively leads VE₁₅₁ in phase and another value when I₁₃₁ lags VE₁₅₁ in phase.

Drivers 111-115 include high-current switching transistors 161-162 arranged in a totem pole to switch coils 131-135 between battery voltage V_(DRIVE) =300.0 volts and ground. In the embodiment of FIG. 1, transistors 161-162 are insulated gate bipolar transistors, so that the drive voltages applied to their respective gates are of opposite polarity to ensure that transistors 161-162 are not turned on at the same time. Alternatively, other types of semiconductor devices can be used by appropriately modifying interface circuit 117. That is, when the voltage on output 171 of pulse generator 119 is logic high, the drive at node 181 is high while the drive on node 182 is low, or vice versa. A similar relationship exists between outputs 173 and 175 and nodes 183-184 and 185-186. Alternative configurations are known and can be used to implement drivers 111-115.

Interface circuit 117 operates as a level shifter for converting pulses from pulse generator 119, operating from supply V_(CC) =5.0 volts, to the levels needed for driving transistors 161-162 of drivers 111-115, which operate from battery voltage V_(DRIVE) =300.0 volts.

Phase detector 123 is configured as a multiplier or other detection circuit which produces CONTROL at its output. When the phase changes polarity to indicate a change in power factor, CONTROL is applied to pulse generator 119 to switch "on-the-fly" from one sequence of drive pulses to another sequence optimized for the changed condition. This feature of the present invention which allows the system to adapt to changing conditions improves on prior art motor drive systems, which are limited to a single, fixed sequence of drive pulses.

Pulse generator 119 produces a V₁₅₁ -V₁₅₅ drive pulse in each time period designated as T_(DRIVE). For example, to drive a motor rotating at 60.0 hertz (3,600 rotations per minute), drive pulses may be generated at a rate of 7,200 hertz to produce 120.0 time periods per rotation, so that T_(DRIVE) =138.9 microseconds. The period of T_(DRIVE) changes at the same rate as the motor speed, so each T_(DRIVE) time period advances the phase by 360°/120=3° at any speed of motor 101. V₁₅₁ -V₁₅₅ pulse widths are computed for each T_(DRIVE) to produce the desired phase.

Power dissipation during switching transitions depends not only on the battery voltage V_(DRIVE), but also on the amount of coil current being switched by a driver. Hence, power consumption can be reduced by reducing the overall number of switching transitions and by switching coils while they are conducting lower currents. For example, if I₁₃₁ is split at central node 157 to produce I₁₃₃ =I₁₃₅ =I₁₃₁ /2, then less power is consumed if I₁₃₃ or I₁₃₅ are commutated rather than I₁₃₁.

FIG. 2 shows normalized representative waveforms of I₁₃₁ and VE₁₅₁ while motor 101 is motoring. VE₁₅₁ is measured from node 151 to ground and is produced by a sequence of variable width drive pulses referred to as an alternating S₇ null sequence described in detail below. Note that VE₁₅₁ is not a sine wave due to fluctuations in the potential of central node 157. However, I₁₃₁ is substantially sinusoidal, as is the voltage V_(COIL) across coil 131, i.e., from node 151 to 157. The phase of I₁₃₁ lags that of VE₁₅₁. Similar waveforms can be obtained for VE₁₅₃ and VE₁₅₅ at nodes 153 and 155 and currents I₁₃₃ and I₁₃₅ through coils 133 and 135.

The alternating S₇ null sequence is used to provide not only a low overall amount of switching, but also to avoid switching coils while peak current is flowing through them. As shown in the figure, I₁₃₁ reaches peak levels during the interval TP₁ -TP₂ while VE₁₅₁ =V_(DRIVE) remains at a constant voltage. Consequently, pulse generator 119 produces a pulse at output 171 which remains at logic high throughout TP₁ -TP₂ to keep transistor 162 turned off and transistor 161 turned on. Similarly, in the interval TP₃ -TP₄, I₁₃₁ reaches a peak level while VE₁₅₁ =0.0 volts remains constant, so pulse generator 119 produces a pulse at output 171 which remains at logic low throughout TP₃ -TP₄ to keep transistor 161 turned off and transistor 162 turned on. Hence, transistors 161-162 are not switched when I₁₃₁ is high, thereby substantially reduced transient power.

FIG. 3 is a similar graph of I₁₁₃ and VE₁₅₁ but while motor 101 is regenerating. VE₁₅₁ is produced by a sequence referred to as an alternating S₀ null sequence described below. Note that the phase angle of I₁₃₁ leads that of VE₁₅₁. Phase voltages VE₁₅₃ and VE₁₅₅ and currents I₁₃₃ and I₁₃₅ have similar waveforms. As is the case during motoring, VE₁₅₁ is not sinusoidal, whereas both I₁₃₁ and V_(COIL) are sinusoidal.

The alternating S₀ null sequence is a mirror image of the alternating S₇ null sequence. Therefore, the intervals where VE₁₅₁ remains constant are different, so that a shift in the peak levels of I₁₃₁ caused by a change in power factor can coincide with the interval where VE₁₅₁ =0.0 volts is constant. Transistor 161 remains turned off while transistor 162 remains turned on. Similarly, in the interval TP₇ -TP₈. I₁₃₁ reaches a peak level while VE₁₅₁ =V_(DRIVE) remains constant, so transistor 162 remains turned off and transistor 161 remains turned on.

The alternating S₀ and S₇ null sequences are computed using a space vector modulation (SVM) technique. Briefly, each of the nodes 151-155 has two possible states, either V_(DRIVE) (logic high or "1") or ground potential (logic low or "0"). The 2³ =8 possible voltage combinations which can appear at nodes 151-155 are designated as base vectors S₀ -S₇ and listed in Table 1 below.

                  TABLE 1                                                          ______________________________________                                                   Base                                                                           Node       Node          Node                                                                            Phase                                      Vector           151                                                                                     153              Angle                               ______________________________________                                                   Groundb  Ground        Ground                                                                             Null                                      S.sub.1 = 100                                                                                  V.sub.DRIVE                                                                          Ground        Ground                                                                                0°                           S.sub.2 = 110                                                                                  V.sub.DRIVE                                                                           V.sub.DRIVE                                                                                Ground                                                                                 60°                          S.sub.3 = 010                                                                                  Ground                                                                                V.sub.DRIVE                                                                                Ground                                                                                120°                          S.sub.4 = 011                                                                                  Ground                                                                                V.sub.DRIVE                                                                                 V.sub.DRIVE                                                                         180°                           S.sub.5 = 001                                                                                  Ground                                                                               Ground             240°                           S.sub.6 = 101                                                                                  V.sub.DRIVE                                                                          Ground             300°                           S.sub.7 = 111                                                                                  V.sub.DRIVE                                                                           V.sub.DRIVE                                                                                 V.sub.DRIVE                                                                         Null                                  ______________________________________                                    

For example, base vector S₁ (100) indicates that pulse generator 119 produces a logic high pulse at output 171 and logic low pulses at outputs 173 and 175. Interface circuit 117 combines with drivers 111-115 to drive node 151 to V_(DRIVE) and nodes 153-155 to ground. Hence, I₁₃₁ splits at central node 157 and flows equally as I₁₃₃ and I₁₃₅ though coils 133 and 135. The higher current through coil 131 tends to orient the rotor of motor 101 to the 0° angle of coil 131. Conversely, base vector S₄ (011) drives node 151 to ground and nodes 153-155 to V_(DRIVE). I₁₃₁ has the opposite polarity, again flowing equally through coils 133 and 135 to orient the rotor of motor 101 to an angle opposite to coil 131, or 180° as shown in Table 1. In a similar fashion, the other base vectors produce magnetic fields which tend to orient the rotor to angles indicated in the last column of Table 1. A combination of base vectors is generated within a time period T_(DRIVE) to drive motor 101 to other phase angles.

The two "null" vectors, S₀ and S₇, do not cause current to flow through coils 131-135. Null vector S₀ (000) drives nodes 151-155 to ground potential, so that I₁₃₁ =I₁₃₃ =I₁₃₅ =0.0. Similarly, null vector S₇ (111) drives nodes 151-155 to V_(DRIVE), so that I₁₃₁ =I₁₃₃ =I₁₃₅ =0.0. Hence, null vectors S₀ and S₇ do not affect the angle of the rotor. However, the null vector chosen can determine the amount of switching in drivers 111-115, and therefore the power dissipated.

FIG. 4 is a vector state diagram showing graphically how SVM is used to compute drive pulses for an angle Φ from base vectors S₀ -S₇. Base vectors S₁ -S₆ define 60° regions or sectors of a cycle of motor 101, with their tips lying at the corners of a regular hexagon 201 as shown. Vector 210 is directed at an angle Φ between adjacent base vectors S₁ and S₂. The distance from the center of circle 203 to the perimeter of hexagon 201 represents time period T_(DRIVE).

Vector 210 is resolved into component vectors 212 and 214 of base vectors S₁ and S₂ whose lengths represent pulse widths T_(S1) and T_(S2) within T_(DRIVE). When T_(S1) +T_(S2) <T_(DRIVE), a null vector, either S₀ or S₇, is generated for the remainder of T_(DRIVE), which allows pulse generator 119 to compute drive pulses at fixed phase increments. Hence, vector 210 is generated by generating S₁ with a pulse width T_(S1), S₂ with a pulse width T_(S2) and a null vector (S₀ or S₇) for the remaining period T_(DRIVE) -(T_(S1) +T_(S2)). Vectors lying in other sectors are similarly computed from base vectors.

In general, a vector at an angle Φ is generated by resolving into component vectors parallel to adjacent base vectors S_(i) and S_(i+1) and having pulse widths T_(i) and T_(i+1), where i is an integer between one and six. Assuming base vector S_(i) has a phase angle bit the pulse widths are computed from the following equations 1-4.

    Θ=Φ-Φ.sub.I                                  (1)

    T.sub.i =m*T.sub.DRIVE *sin(60°-Θ)            (2)

    T/.sub.i+1 =m*T.sub.DRIVE *sin(Θ)                    (3)

    T.sub.NULL =T.sub.DRIVE -(T.sub.i +T.sub.i+1)              (4)

A scale factor m is used to scale pulse widths T_(i) and T_(i+1) within T_(DRIVE) to adjust the power delivered to motor 101. Hence, m can be adjusted to produce a sequence for idling motor 101. The value of m is between zero and one.

FIG. 5 is a timing diagram showing drive pulses of V₁₅₁ -V₁₅₅ over two successive T_(DRIVE) time periods of an alternating S₇ null sequence, where T₅ -T₀ =T₁₀ -T₅ =T_(DRIVE). T₅ corresponds to an angle of 60° to show the alternation of null vectors S₇ and S₀.

The interval T₀ -T₅ lies in the 0°-60° sector, so pulse generator 119 uses base vectors S₁ and S₂ to compute pulse widths for V₁₅₁ -V₁₅₅ from equations 1-4. The V₁₅₁ -V₁₅₅ pulses are center-aligned within T₀ -T₅ around midpoint T_(C) to minimize the amount of simultaneous switching of drivers 111-115, which reduces system noise and harmonic jitter. Hence, one-half of S₂ is generated during T₁ -T₂ and the other half during T₃ -T₄. Similarly, one-half of S₇ is generated during T₀ -T₁ and the other half during T₄ -T₅. S₁ is generated during T₂ -T₃. This vector sequence is used for all T_(DRIVE) time periods in the 0°-60° sector, which lies within interval TP₁ -TP₂ of FIG. 2 where I₁₃₁ is near peak levels. Note that V₁₅₁ is not switched during this period, but instead remains at a constant voltage V_(DRIVE). Pulse widths are varied in accordance with equations 1-4 to advance the phase angle through the sector.

The time period T₅ -T₁₀ occurs in the 60°-120° sector, and uses base vectors S₂ and S₃ to compute pulse widths of V₁₅₁ -V₁₅₅ from equations 1-4. V₁₅₁ -V₁₅₅ are center-aligned as described above. Base vector S₂ is produced during T₅ -T₆, S₃ during T₆ -T₇, null vector S₀ during T₇ -T₈, S₃ during T₈ -T₉ and S₂ during T₉ -T₁₀. Note that null vector S₀ is used in the 60°-120° sector, rather than S₇ as in the 0°60° sector.

Table 2 below shows vector angles, base vector sequences, and drive pulse sequences for the sectors.

                  TABLE 2                                                          ______________________________________                                                                      (V.sub.151 V.sub.153 V.sub.155)                   Sector  Phase Angle                                                                                     Sequence                                                                                     Drive Pulse Sequence                    ______________________________________                                                 0°-60°                                                                      S.sub.7 S.sub.2 S.sub.1 S.sub.2 S.sub.7                                                  111,110,100,110,111                               2          60°-120°                                                                   S.sub.2 S.sub.3 S.sub.0 S.sub.3 S.sub.2                                                  110,010,000,010,110                             3           120°-180°                                                                  S.sub.7 S.sub.4 S.sub.3 S.sub.4 S.sub.7                                                 111,011,010,011,111                             4           180°-240°                                                                  S.sub.4 S.sub.5 S.sub.0 S.sub.5 S.sub.4                                                 011,001,000,001,011                             5           240°-300°                                                                  S.sub.7 S.sub.6 S.sub.5 S.sub.6 S.sub.7                                                 111,101,001,101,111                             6           300°-360°                                                                  S.sub.6 S.sub.5 S.sub.0 S.sub.5 S.sub.6                                                 101,100,000,100,101                             ______________________________________                                    

Note that the null vector alternates between S₇ and S₀ in adjacent sectors. In other words, sectors 1, 3 and 5 use null vector S₇, whereas sectors 2, 4 and 6 use null vector S₀. During motoring, when the coil currents lag the voltage envelope at nodes 151-155, an alternating null sequence beginning with S₇ has the advantage of minimizing switching transitions and power consumption when coil currents are at or near their peaks.

FIG. 6 is a timing diagram showing the relationship between drive vectors and drive pulses V₁₅₁ -V₁₅₅ over two successive T_(DRIVE) time periods of an alternating S₀ null sequence, where T₅ -T₀ =T₁₀ -T₅ =T_(DRIVE). T₅ corresponds to a 60° phase angle to show the alternation of null vectors S₀ and S₇. From T₀ to T₅, base vectors S₁ and S₂ and null vector S₀ are used to compute V₁₅₁ -V₁₅₅. From T₅ to T₁₀, base vectors S₂ and S₃ and null vector S₇ are used.

The pulse widths of V₁₅₁ -V₁₅₅ are computed by pulse generator 119 using equations 1-4 above, and then center-aligned within the period T₀ -T₅ around midpoint T_(C) to minimize simultaneous switching. Hence, base vector S₂ is generated from T₀ -T₁, S₁ is generated from T₁ -T₂, null vector S₀ is generated from T₂ -T₃, S₁ from T₃ -T₄, and S₂ from T₄ -T₅. This sequence is repeated in the other T_(DRIVE) time periods within the 0°-60° sector, which lies within the interval TP₅ to TP₆ of FIG. 4 where I₁₃₁ is near its peak levels. As can be seen, V₁₅₁ is not switched during this period, but instead remains at a constant ground potential throughout the 0°-60° sector.

Time period T₅ T₁₀ occurs in the 60°-120° sector and uses S₂ and S₃ to compute pulse widths of V₁₅₁ -V₁₅₅ from equations 1-4. To reduce simultaneous switching, V₁₅₁ -V₁₅₅ are center-aligned. Hence, null vector S₇ is generated during T₅ -T₆, base vector S₂ during T₆ -T₇, S₃ from T₇ -T₈, S₂ from T₈ to T₉ and null vector S₇ during T₉ -T₁₀. Note that null vector S₇ is used in the 60°-120° sector, whereas S₀ is used in the 0°-60° sector.

The complete alternating null S₀ sequence for each sector in a cycle of motor 101 is shown in Table 3 below.

                  TABLE 3                                                          ______________________________________                                                                      (V.sub.151 V.sub.153 V.sub.155)                   Sector  Phase Angle                                                                                     Sequence                                                                                     Drive Pulse Sequence                    ______________________________________                                               1                                                                                0°-60°                                                                      S.sub.2 S.sub.1 S.sub.0 S.sub.1 S.sub.2                                                  110,100,000,100,110                               2          60°-120°                                                                   S.sub.7 S.sub.3 S.sub.2 S.sub.3 S.sub.7                                                  111,010,110,010,110                             3           120°-180°                                                                  S.sub.4 S.sub.3 S.sub.0 S.sub.3 S.sub.4                                                 011,010,000,010,011                             4           180°-240°                                                                  S.sub.7 S.sub.4 S.sub.5 S.sub.4 S.sub.7                                                 111,011,001,011,111                             5           240°-300°                                                                  S.sub.6 S.sub.5 S.sub.0 S.sub.5 S.sub.6                                                 101,001,000,001,101                             6           300°-360°                                                                  S.sub.7 S.sub.6 S.sub.1 S.sub.6 S.sub.7                                                 111,101,100,101,111                             ______________________________________                                    

Note that sectors 1, 3 and 5 use null vector S₀, whereas sectors 2, 4 and 6 use null vector S₇. During regenerating, when the coil currents effectively lead in phase, the alternating null S₀ sequence has the advantage of minimizing driver switching and power consumption when coil currents are at or near their peaks.

By now it should be appreciated that the present invention provides an electric motor drive circuit and method which improves performance by adapting to changes in the operating conditions of the motor. A pulse generator drives the electric motor with a sequence of drive pulses over a series of time periods. The pulse widths of the drive pulses are varied to represent phases of the electric motor. A physical state of the motor, such as its power factor or temperature, is monitored by a sensor to produce a representative control signal. When the electric motor is configured to operate either as a motor supplying power to a load or as a generator which receives power from the load, a physical state such as the motor's power factor can be used to generate one sequence of drive pulses while the motor is motoring and to switch to another sequence when the motor is regenerating. When the physical state changes, the pulse generator responds to the control signal by switching to another sequence of drive pulses to drive the motor. 

What is claimed is:
 1. A method for operating an electric motor, comprising the steps of:generating a first sequence of drive pulses using a Space Vector Modulation (SVM) technique; generating a second sequence of drive pulses; and switching from the first sequence of drive pulses to the second sequence of drive pulses to operate the electric motor in response to a control signal representative of a physical state of the electric motor.
 2. The method of claim 1, further comprising the step of sensing a coil current through a coil of the electric motor to produce the control signal.
 3. The method of claim 2, wherein the step of sensing includes sensing a phase angle between the coil current through the coil and a voltage across the coil.
 4. The method of claim 3, further comprising the step of computing a phase of the coil current from a coil voltage.
 5. The method of claim 4, further comprising the steps of:driving a coil of the electric motor with the first sequence of drive pulses when the phase of the coil current has a first value; and driving the coil with the second sequence of drive pulses when the phase of the coil current has a second value.
 6. The method of claim 5, wherein the coil current has the first value when the electric motor is motoring and the second value when the electric motor is regenerating.
 7. The method of claim 1, further comprising the step of sensing a temperature of the electric motor to produce the control signal.
 8. The method of claim 1, wherein the first commutation sequence is generated using a Space Vector Modulation (SVM) technique.
 9. The method of claim 1, wherein the step of switching includes the steps of:operating the electric motor using the first sequence of drive pulses when the control signal indicates that the electric motor is motoring; and operating the electric motor using the second sequence of drive pulses when the control signal indicates that the electric motor is regenerating.
 10. The method of claim 1, wherein the control signal is representative of a temperature of the electric motor.
 11. The method of claim 1, further including the step of applying the first sequence of drive pulses to coils of the electric motor for orienting a rotor of the electric motor to a first phase angle range.
 12. A method for increasing efficiency of an electric motor, comprising the steps of:generating a first ordered sequence of variable width voltage pulses to produce a first voltage envelope, wherein coil currents are generated in coils of the electric motor in response to the variable width voltage pulses to generate an electromagnetic force that drives a rotor of the electric motor, wherein a portion of the first voltage envelope remains at a constant voltage when a first coil current reaches a peak current level; generating a second ordered sequence of variable width voltage pulses to produce a second voltage envelope; monitoring a control coil current of the electric motor; operating the electric motor using the first ordered sequence when a phase of the control coil current has a first value; and operating the electric motor using the second ordered sequence when the phase of the control coil current has a second value.
 13. The method of claim 12, wherein the phase of the control coil current has the first value when the electric motor is motoring.
 14. The method of claim 12, wherein the phase of the control coil current has the second value when the electric motor is regenerating.
 15. The method of claim 12, wherein the first ordered sequence of variable width voltage pulses is generated using a Space Vector Modulation (SVM) technique. 